package com.panfeng.xcloud.boss.provider.member.service;

import com.panfeng.xcloud.boss.provider.member.dto.request.*;
import com.panfeng.xcloud.boss.provider.member.dto.response.*;
import com.panfeng.xcloud.dao.base.IMapperSupport;
import com.panfeng.xcloud.dao.member.entity.UserBase;

import javax.servlet.http.HttpServletRequest;

public interface IUserBasicService extends IMapperSupport<Integer, UserBase> {

    /**
     * 只有在用户实名认证完成之后才给注册的用户上级发放糖果（@TODO:之前是在注册的时候发放）
     *
     * @param userId
     */
    void asynSendXdInviterForRealName(String userId);

    /**
     * 登录并获取认证中心token
     *
     * @param loginReqDTO
     * @param request
     * @return
     */
    LoginRespDTO loginForToken(LoginReqDTO loginReqDTO, HttpServletRequest request);

    /**
     * 异步更新用户最新一次登录时间
     * @param userId
     * @return
     */
    void asynUpdateLastLoginTime(String userId);

    /**
     * 查询用户基本信息
     *
     * @param userAccount (手机号或者邮箱)
     * @return
     */
    UserBase queryUserByUserName(String userAccount);

    /**
     * 检查用户账户
     *
     * @param checkUserAccountReqDTO
     * @return
     */
    CheckUserAccountRespDTO checkUserAccount(CheckUserAccountReqDTO checkUserAccountReqDTO);

    /**
     * 用户注册
     *
     * @param regReqDTO
     * @return
     */
    RegRespDTO register(RegReqDTO regReqDTO);

    /**
     * 获取字典表配置
     *
     * @param getDefaultConfigReqDTO
     * @return
     */
    GetDefaultConfigRespDTO getDefaultConfig(GetDefaultConfigReqDTO getDefaultConfigReqDTO);

    /**
     * 修改字典表配置
     *
     * @param changeDefaultConfigReqDTO
     * @return
     */
    ChangeDefaultConfigRespDTO changeDefaultConfig(ChangeDefaultConfigReqDTO changeDefaultConfigReqDTO);

    /**
     * 异步建立邀请关系
     *
     * @param userInviterDto
     */
    void asynBuildInviteRelation(UserInviterReqDTO userInviterDto);

    /**
     * 基本资料-查询用户基本信息
     *
     * @param queryUserInfoReqDTO
     * @return
     */
    QueryUserInfoRespDTO queryUserInfo(QueryUserInfoReqDTO queryUserInfoReqDTO);

    /**
     * 修改用户基本信息
     *
     * @param updInfoReqDTO
     * @return
     */
    boolean updateBasicInfo(UpdInfoReqDTO updInfoReqDTO);

    /**
     * 修改账号密码
     *
     * @param updPwdReqDTO
     * @return
     */
    boolean updatePwd(UpdPwdReqDTO updPwdReqDTO);

    /**
     * 账号安全-设置交易密码
     *
     * @param setTransPwdReqDTO
     * @return
     */
    boolean setTransPwd(SetTransPwdReqDTO setTransPwdReqDTO);

    /**
     * 修改手机或者邮箱验证码
     *
     * @param updMobileEmailReqDTO
     * @return
     */
    boolean updateMobileEmail(UpdMobileEmailReqDTO updMobileEmailReqDTO);

    /**
     * 设置谷歌验证器秘钥
     *
     * @param googleVerifierKeyReqDTO
     * @return
     */
    boolean setGoogleVerifierKey(GoogleVerifierKeyReqDTO googleVerifierKeyReqDTO);

    /**
     * 查询谷歌验证器秘钥
     * @param queryGoogleVerifierKeyReqDTO
     * @return
     */
    QueryGoogleVerifierKeyRespDTO queryGoogleVerifierKey(QueryGoogleVerifierKeyReqDTO queryGoogleVerifierKeyReqDTO);

    /**
     * 页面功能状态
     *
     * @param flagReqDTO
     * @return
     */
    FlagRespDTO flagDistinguish(FlagReqDTO flagReqDTO);

    /**
     * 基本资料-修改头像
     *
     * @param updHeadImgReqDTO
     * @return
     */
    boolean updateHeadImg(UpdHeadImgReqDTO updHeadImgReqDTO);

    /**
     * 身份认证状态
     *
     * @param identityOcrAuthStatusReqDTO
     * @return
     */
    IdentityOcrAuthStatusRespDTO getAuditStatus(IdentityOcrAuthStatusReqDTO identityOcrAuthStatusReqDTO);

    /**
     * 重置登录密码
     *
     * @param resetLoginPwdReqDTO
     * @return
     */
    boolean resetLoginPwd(ResetLoginPwdReqDTO resetLoginPwdReqDTO);

    /**
     * ocr身份认证
     * @param userEntityOcrReqDTO
     * @return
     */
    void ocrIdentityAuthentication(UserEntityOcrReqDTO userEntityOcrReqDTO);

    /**
     * 查询当前ocr身份认证当前限制次数
     *
     * @param queryOcrAuthCountReqDTO
     * @return
     */
    QueryOcrAuthCountRespDTO queryCurrentOcrAuthCount(QueryOcrAuthCountReqDTO queryOcrAuthCountReqDTO);

    /**
     * 验证app版本
     * @param checkAppVersionReqDTO
     * @return
     */
    CheckAppVersionRespDTO checkAppVersion(CheckAppVersionReqDTO checkAppVersionReqDTO);

    /**
     * 刷新token
     *
     * @param refreshTokenReqDTO
     * @param request
     * @return
     */
    RefreshTokenRespDTO refreshToken(RefreshTokenReqDTO refreshTokenReqDTO, HttpServletRequest request);

    /**
     * 查询账号是否存在
     *
     * @param accountNumberStatusReqDTO
     * @return
     */
    AccountNumberStatusRespDTO queryAccountNumberStatus(AccountNumberStatusReqDTO accountNumberStatusReqDTO);

    /**
     * 通过身份证号查询身份认证状态
     *
     * @param identityAuthStatusExtReqDTO
     * @return
     */
    IdentityOcrAuthStatusRespDTO getOcrAuditStatusByIdnumber(IdentityAuthStatusExtReqDTO identityAuthStatusExtReqDTO);
}
